home *** CD-ROM | disk | FTP | other *** search
/ AMIGA-CD 2 / Amiga-CD - Volume 2.iso / ungepackte_daten / 1994 / 8 / 05 / term-4.0-source.lha / MacroPanel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-06-26  |  8.1 KB  |  365 lines

  1. /*
  2. **    MacroPanel.c
  3. **
  4. **    Editing panel for key macro configuration
  5. **
  6. **    Copyright © 1990-1994 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_QUALIFIER=1,GAD_F1,GAD_F2,GAD_F3,GAD_F4,GAD_F5,GAD_F6,GAD_F7,
  13.         GAD_F8,GAD_F9,GAD_F10,GAD_USE,GAD_LOAD,GAD_SAVE,GAD_CANCEL };
  14.  
  15. VOID __regargs
  16. MacroPanel(struct MacroKeys *MacroKeys)
  17. {
  18.     struct MacroKeys    *Keys;
  19.     ULONG             OldCRC;
  20.  
  21.     OldCRC = DoCRC(MacroKeys,sizeof(struct MacroKeys));
  22.  
  23.     if(Keys = (struct MacroKeys *)AllocVecPooled(sizeof(struct MacroKeys),MEMF_ANY))
  24.     {
  25.         struct LayoutHandle *Handle;
  26.     
  27.         CopyMem(MacroKeys,Keys,sizeof(struct MacroKeys));
  28.  
  29.         if(Handle = LT_CreateHandleTags(Window -> WScreen,
  30.             LH_LocaleHook,    &LocaleHook,
  31.         TAG_DONE))
  32.         {
  33.             struct Window *Window;
  34.     
  35.             LT_New(Handle,
  36.                 LA_Type,    VERTICAL_KIND,
  37.             TAG_DONE);
  38.             {
  39.                 LT_New(Handle,
  40.                     LA_Type,    VERTICAL_KIND,
  41.                     LA_LabelID,    MSG_V36_0094,
  42.                 TAG_DONE);
  43.                 {
  44.                     LT_New(Handle,
  45.                         LA_Type,    VERTICAL_KIND,
  46.                     TAG_DONE);
  47.                     {
  48.                         LT_New(Handle,
  49.                             LA_Type,    CYCLE_KIND,
  50.                             LA_LabelID,    MSG_MACROPANEL_KEY_MODIFIER_GAD,
  51.                             LA_ID,        GAD_QUALIFIER,
  52.                             LACY_FirstLabel,MSG_MACROPANEL_NONE_TXT,
  53.                             LACY_LastLabel,    MSG_MACROPANEL_CONTROL_TXT,
  54.                         TAG_DONE);
  55.     
  56.                         LT_New(Handle,
  57.                             LA_Type,    XBAR_KIND,
  58.                         TAG_DONE);
  59.     
  60.                         LT_EndGroup(Handle);
  61.                     }
  62.     
  63.                     LT_New(Handle,
  64.                         LA_Type,    VERTICAL_KIND,
  65.                     TAG_DONE);
  66.                     {
  67.                         STATIC STRPTR Labels[10] =
  68.                         {
  69.                             "F _1",
  70.                             "F _2",
  71.                             "F _3",
  72.                             "F _4",
  73.                             "F _5",
  74.                             "F _6",
  75.                             "F _7",
  76.                             "F _8",
  77.                             "F _9",
  78.                             "F1_0"
  79.                         };
  80.     
  81.                         LONG i;
  82.     
  83.                         for(i = 0 ; i < 10 ; i++)
  84.                         {
  85.                             LT_New(Handle,
  86.                                 LA_Type,    STRING_KIND,
  87.                                 LA_LabelText,    Labels[i],
  88.                                 LA_Chars,    40,
  89.                                 LA_ID,        GAD_F1 + i,
  90.                             TAG_DONE);
  91.                         }
  92.     
  93.                         LT_EndGroup(Handle);
  94.                     }
  95.     
  96.                     LT_EndGroup(Handle);
  97.                 }
  98.     
  99.                 LT_New(Handle,
  100.                     LA_Type,VERTICAL_KIND,
  101.                 TAG_DONE);
  102.                 {
  103.                     LT_New(Handle,
  104.                         LA_Type,    XBAR_KIND,
  105.                         LAXB_FullSize,    TRUE,
  106.                     TAG_DONE);
  107.     
  108.                     LT_EndGroup(Handle);
  109.                 }
  110.  
  111.                 LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  112.                     LAGR_SameSize,    TRUE,
  113.                     LAGR_Spread,    TRUE,
  114.                 TAG_DONE);
  115.                 {
  116.                     LT_New(Handle,
  117.                         LA_Type,    BUTTON_KIND,
  118.                         LA_LabelID,    MSG_GLOBAL_USE_GAD,
  119.                         LA_ID,        GAD_USE,
  120.                         LABT_ReturnKey,    TRUE,
  121.                         LABT_ExtraFat,    TRUE,
  122.                     TAG_DONE);
  123.     
  124.                     LT_New(Handle,
  125.                         LA_Type,    BUTTON_KIND,
  126.                         LA_LabelID,    MSG_GLOBAL_LOAD_GAD,
  127.                         LA_ID,        GAD_LOAD,
  128.                         LABT_ExtraFat,    TRUE,
  129.                     TAG_DONE);
  130.     
  131.                     LT_New(Handle,
  132.                         LA_Type,    BUTTON_KIND,
  133.                         LA_LabelID,    MSG_GLOBAL_SAVE_GAD,
  134.                         LA_ID,        GAD_SAVE,
  135.                         LABT_ExtraFat,    TRUE,
  136.                     TAG_DONE);
  137.     
  138.                     LT_New(Handle,
  139.                         LA_Type,    BUTTON_KIND,
  140.                         LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  141.                         LA_ID,        GAD_CANCEL,
  142.                         LABT_EscKey,    TRUE,
  143.                         LABT_ExtraFat,    TRUE,
  144.                     TAG_DONE);
  145.     
  146.                     LT_EndGroup(Handle);
  147.                 }
  148.     
  149.                 LT_EndGroup(Handle);
  150.             }
  151.     
  152.             if(Window = LT_Layout(Handle,LocaleString(MSG_MACROPANEL_MACRO_PREFERENCES_TXT),NULL,0,0,IDCMP_CLOSEWINDOW,0,
  153.                 LAWN_HelpHook,        &GuideHook,
  154.                 WA_DepthGadget,        TRUE,
  155.                 WA_CloseGadget,        TRUE,
  156.                 WA_DragBar,        TRUE,
  157.                 WA_RMBTrap,        TRUE,
  158.                 WA_Activate,        TRUE,
  159.             TAG_DONE))
  160.             {
  161.                 struct IntuiMessage    *Message;
  162.                 BOOLEAN             Done = FALSE;
  163.                 ULONG             MsgClass,
  164.                              MsgQualifier;
  165.                 UWORD             MsgCode;
  166.                 struct Gadget        *MsgGadget;
  167.                 UBYTE             DummyBuffer[MAX_FILENAME_LENGTH],
  168.                             *DummyChar;
  169.                 struct FileRequester    *FileRequest;
  170.                 LONG             Modifier = 0,i;
  171.  
  172.                 GuideContext(CONTEXT_MACROS);
  173.     
  174.                 PushWindow(Window);
  175.     
  176.                 if(XEmulatorBase && Config -> TerminalConfig -> EmulationMode == EMULATION_EXTERNAL)
  177.                 {
  178.                     ULONG KeyMask = XEmulatorGetFreeMacroKeys(XEM_IO,Modifier);
  179.  
  180.                     for(i = 0 ; i < 10 ; i++)
  181.                     {
  182.                         LT_SetAttributes(Handle,GAD_F1 + i,
  183.                             GTST_String,    Keys -> Keys[Modifier][i],
  184.                             GA_Disabled,    !(KeyMask & (1L << i)),
  185.                         TAG_DONE);
  186.                     }
  187.                 }
  188.                 else
  189.                 {
  190.                     for(i = 0 ; i < 10 ; i++)
  191.                     {
  192.                         LT_SetAttributes(Handle,GAD_F1 + i,
  193.                             GTST_String,    Keys -> Keys[Modifier][i],
  194.                         TAG_DONE);
  195.                     }
  196.                 }
  197.  
  198.                 do
  199.                 {
  200.                     if(Wait(PORTMASK(Window -> UserPort) | SIG_BREAK) & SIG_BREAK)
  201.                     {
  202.                         CopyMem(Keys,MacroKeys,sizeof(struct MacroKeys));
  203.     
  204.                         break;
  205.                     }
  206.     
  207.                     while(Message = (struct IntuiMessage *)GT_GetIMsg(Window -> UserPort))
  208.                     {
  209.                         MsgClass    = Message -> Class;
  210.                         MsgQualifier    = Message -> Qualifier;
  211.                         MsgCode        = Message -> Code;
  212.                         MsgGadget    = (struct Gadget *)Message -> IAddress;
  213.     
  214.                         GT_ReplyIMsg(Message);
  215.     
  216.                         LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  217.     
  218.                         if(MsgClass == IDCMP_CLOSEWINDOW)
  219.                         {
  220.                             CopyMem(Keys,MacroKeys,sizeof(struct MacroKeys));
  221.     
  222.                             Done = TRUE;
  223.                         }
  224.     
  225.                         if(MsgClass == IDCMP_GADGETUP)
  226.                         {
  227.                             switch(MsgGadget -> GadgetID)
  228.                             {
  229.                                 case GAD_QUALIFIER:
  230.  
  231.                                     for(i = 0 ; i < 10 ; i++)
  232.                                         strcpy(Keys -> Keys[Modifier][i],(STRPTR)LT_GetAttributes(Handle,GAD_F1 + i,TAG_DONE));
  233.  
  234.                                     Modifier = MsgCode;
  235.  
  236.                                     if(XEmulatorBase && Config -> TerminalConfig -> EmulationMode == EMULATION_EXTERNAL)
  237.                                     {
  238.                                         ULONG KeyMask = XEmulatorGetFreeMacroKeys(XEM_IO,Modifier);
  239.  
  240.                                         for(i = 0 ; i < 10 ; i++)
  241.                                         {
  242.                                             LT_SetAttributes(Handle,GAD_F1 + i,
  243.                                                 GTST_String,    Keys -> Keys[Modifier][i],
  244.                                                 GA_Disabled,    !(KeyMask & (1L << i)),
  245.                                             TAG_DONE);
  246.                                         }
  247.                                     }
  248.                                     else
  249.                                     {
  250.                                         for(i = 0 ; i < 10 ; i++)
  251.                                         {
  252.                                             LT_SetAttributes(Handle,GAD_F1 + i,
  253.                                                 GTST_String,Keys -> Keys[Modifier][i],
  254.                                             TAG_DONE);
  255.                                         }
  256.                                     }
  257.  
  258.                                     break;
  259.  
  260.                                 case GAD_USE:
  261.     
  262.                                     for(i = 0 ; i < 10 ; i++)
  263.                                         strcpy(Keys -> Keys[Modifier][i],(STRPTR)LT_GetAttributes(Handle,GAD_F1 + i,TAG_DONE));
  264.  
  265.                                     CopyMem(Keys,MacroKeys,sizeof(struct MacroKeys));
  266.  
  267.                                     Done = TRUE;
  268.                                     break;
  269.     
  270.                                 case GAD_LOAD:
  271.  
  272.                                     strcpy(DummyBuffer,LastMacros);
  273.  
  274.                                     DummyChar = PathPart(DummyBuffer);
  275.  
  276.                                     *DummyChar = 0;
  277.  
  278.                                     LT_LockWindow(Window);
  279.  
  280.                                     if(FileRequest = GetFile(Window,LocaleString(MSG_MACROPANEL_LOAD_MACRO_KEYS_TXT),DummyBuffer,FilePart(LastMacros),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT),TRUE))
  281.                                     {
  282.                                         if(!LoadMacros(DummyBuffer,Keys))
  283.                                             ShowError(Window,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  284.                                         else
  285.                                         {
  286.                                             MacroChanged = FALSE;
  287.  
  288.                                             OldCRC = DoCRC(Keys,sizeof(struct MacroKeys));
  289.  
  290.                                             strcpy(Config -> FileConfig -> MacroFileName,DummyBuffer);
  291.  
  292.                                             strcpy(LastMacros,DummyBuffer);
  293.  
  294.                                             for(i = 0 ; i < 10 ; i++)
  295.                                             {
  296.                                                 LT_SetAttributes(Handle,GAD_F1 + i,
  297.                                                     GTST_String,Keys -> Keys[Modifier][i],
  298.                                                 TAG_DONE);
  299.                                             }
  300.                                         }
  301.  
  302.                                         FreeAslRequest(FileRequest);
  303.                                     }
  304.  
  305.                                     LT_UnlockWindow(Window);
  306.  
  307.                                     break;
  308.  
  309.                                 case GAD_SAVE:
  310.  
  311.                                     strcpy(DummyBuffer,LastMacros);
  312.  
  313.                                     DummyChar = PathPart(DummyBuffer);
  314.  
  315.                                     *DummyChar = 0;
  316.  
  317.                                     LT_LockWindow(Window);
  318.  
  319.                                     for(i = 0 ; i < 10 ; i++)
  320.                                         strcpy(Keys -> Keys[Modifier][i],(STRPTR)LT_GetAttributes(Handle,GAD_F1 + i,TAG_DONE));
  321.  
  322.                                     if(FileRequest = GetFile(Window,LocaleString(MSG_MACROPANEL_SAVE_MACRO_KEYS_TXT),DummyBuffer,FilePart(LastMacros),DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT),TRUE))
  323.                                     {
  324.                                         if(!WriteIFFData(DummyBuffer,Keys,sizeof(struct MacroKeys),ID_KEYS))
  325.                                             ShowError(Window,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  326.                                         else
  327.                                         {
  328.                                             strcpy(LastMacros,DummyBuffer);
  329.  
  330.                                             MacroChanged = FALSE;
  331.  
  332.                                             OldCRC = DoCRC(Keys,sizeof(struct MacroKeys));
  333.                                         }
  334.  
  335.                                         FreeAslRequest(FileRequest);
  336.                                     }
  337.  
  338.                                     LT_UnlockWindow(Window);
  339.  
  340.                                     break;
  341.  
  342.                                 case GAD_CANCEL:
  343.     
  344.                                     CopyMem(Keys,MacroKeys,sizeof(struct MacroKeys));
  345.     
  346.                                     Done = TRUE;
  347.                                     break;
  348.                             }
  349.                         }
  350.                     }
  351.                 }
  352.                 while(!Done);
  353.     
  354.                 PopWindow();
  355.             }
  356.     
  357.             LT_DeleteHandle(Handle);
  358.         }
  359.  
  360.         FreeVecPooled(Keys);
  361.     }
  362.  
  363.     MacroChanged |= (OldCRC != DoCRC(MacroKeys,sizeof(struct MacroKeys)));
  364. }
  365.